package bszt.ant;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import java.util.stream.IntStream;

public class Code01 {

    /**
     * 问题描述
     * LYA定义一个数组的权值为正数元素的数量减去负数元素的数量。例如，[1,2,-3,-4,5]的权值为1，而[-2,-5]的权值为-2
     * 现在LYA拿到了一个数组，她准备选择恰好k个元素进行取反（同一个元素最多只能取反一次），目标是使得数组的权值尽可能大。你能帮她计算出操作后数组权值的最大值吗？
     * <p></p>
     * 输入格式
     * 第一行包含两个正整数n和k，分别表示数组的长度和选择的元素数量
     * <p></p>
     * 第二行包含n个整数a_i，表示给定的数组
     * <p></p>
     * 输出格式
     * 输出一个整数，表示操作后数组权值的最大值
     */

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        Integer[] arr = new Integer[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        Arrays.sort(arr, Comparator.comparingInt(Math::abs));
        int pos = n - 1;
        int[] visited = new int[n];
        while (k > 0 && pos >= 0) {
            if (arr[pos] < 0) {
                arr[pos] = -arr[pos];
                k--;
                visited[pos] = 1;
            }
            pos--;
        }
        int sum = Arrays.stream(arr).mapToInt(Integer::intValue).sum();
        if (k == 0) {
            System.out.println(sum);
            return;
        }
        pos = 0;
        while (k > 0 && pos < n) {
            if (visited[pos] == 0) {
                sum -= arr[pos] * 2;
                k--;
                visited[pos] = 1;
            }
            pos++;
        }
        System.out.println(sum);
    }
}
